package activities;

import java.util.ArrayList;
import webService.AccesoWebService;
import com.androidmodule.onthego.R;
import entidades.PromocionComun;
import extras.NetInfo;
import extras.leerPreferencias;
import adaptadores.AdaptadorPromocionesComunes;
import android.app.ListActivity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.TaskStackBuilder;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Toast;
import android.widget.TextView;

public class ActivityPromocionesComunes extends ListActivity {
    private AdaptadorPromocionesComunes promocionesComunes;
	private ProgressBar progresoPromocionesComunes;
	protected TextView textoListaVacia;
	private hiloPromocionesComunes hiloBuscaPromociones;
	private boolean pausada;
	
	@SuppressWarnings("unchecked")
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_promociones_comunes);
        hiloBuscaPromociones = new hiloPromocionesComunes();
		promocionesComunes = new AdaptadorPromocionesComunes(getApplicationContext());
		progresoPromocionesComunes = (ProgressBar) this.findViewById(R.id.progressBarPromocionComun);
		textoListaVacia = (TextView) this.findViewById(android.R.id.empty);
		setListAdapter(promocionesComunes);
		
		if(savedInstanceState==null)
            buscarPromociones();	
		else
		    this.cargarPromocionesComunes((ArrayList<PromocionComun>)savedInstanceState.get("promociones"));
    }
	
	protected void onListItemClick(ListView lista, View arg1, int position,long arg3) {
			     PromocionComun promocionAPasar = (PromocionComun)promocionesComunes.getItem(position);       
                 Intent intentoPromocionParticular = new Intent(this.getApplicationContext(),ActivityPromocionComun.class);
                 intentoPromocionParticular.putExtra("PromocionId", Integer.parseInt(promocionAPasar.getId()));
                 startActivity(intentoPromocionParticular);
                 super.onListItemClick(this.getListView(), arg1, position, arg3);
     }
	
	@Override
	public void onSaveInstanceState(Bundle savedInstanceState) {
	    savedInstanceState.putParcelableArrayList("promociones", this.promocionesComunes.getListaPromociones());
	    
	    // Always call the superclass so it can save the view hierarchy state
	    super.onSaveInstanceState(savedInstanceState);
	}
	public void onResume(){
		super.onResume();
		if(pausada){
			buscarPromociones();
		}
		
		
	}
	public void onPause(){
		super.onPause();
		pausada=true;
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
	    MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.menu_promociones_comunes,menu);
	    return true;
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    // Handle item selection
	    switch (item.getItemId()) {
	       
	        
	        case R.id.filtrosPromoComunes:
	        	Intent intentoActivity = new 
				Intent(getApplicationContext(),ActivityPreferenciasGenerales.class);
		        startActivity(intentoActivity);
		    return true;

	        
	            // NO ANDA VER PORQUE
	        default:
	            return super.onOptionsItemSelected(item);
	    }
	}
	
	/**
	 * Recibe como parametro  un ArrayList con las promociones Comunes obtenidas del servidor
	 * y las carga en la lista del adaptador
	 * @param promocionesWebService
	 * no tiene retorno
	 */
	public void cargarPromocionesComunes( ArrayList<PromocionComun> promocionesWebService) {
		this.promocionesComunes.limpiar();
        for(PromocionComun promocion:promocionesWebService){
            this.promocionesComunes.agregarPromocionComun(promocion);
            this.promocionesComunes.notifyDataSetChanged();
        }
    }
	
	/**
	 * Metodo que encapsula la funcionalidad asociada con la busqueda de promociones
	 */
	public void buscarPromociones(){
		if(NetInfo.isOnline(getApplicationContext())){
			progresoPromocionesComunes.setVisibility(ProgressBar.VISIBLE);
			textoListaVacia.setText(R.string.lista_buscandoPromociones);
			hiloPromocionesComunes mHiloBuscaPromociones = new hiloPromocionesComunes();
		    mHiloBuscaPromociones.execute();
		}
		else{
			Toast.makeText(getApplicationContext(),getString(R.string.mensaje_sinConexion),
			        Toast.LENGTH_LONG).show();
			textoListaVacia.setText(getString(R.string.lista_sinConexion));
			mostrarError();
		}
	}
	
	/**
	 * Clase interna, es el hilo que busca las promociones comunes en el servidor
	 * @author Marco
	 *
	 */
	public class hiloPromocionesComunes extends AsyncTask<Void, Integer, ArrayList<PromocionComun>> {
        String mensajeError ="";
        ArrayList<PromocionComun> promocionesWebService;
        
        public hiloPromocionesComunes(){
            promocionesWebService = new ArrayList<PromocionComun>();
        }

        @Override
        protected ArrayList<PromocionComun> doInBackground(Void... params) { 
            try{
    	        AccesoWebService accesoWeb = new AccesoWebService();
    	        Integer idEstado=null;
				Integer idPais=null;
				if(leerPreferencias.readFiltroPais(getApplicationContext()).equals("-1")){}
				else{
					idPais = Integer.parseInt(leerPreferencias.readFiltroPais(getApplicationContext()));
				}
				if(leerPreferencias.readFiltroEstado(getApplicationContext()).equals("-1")){}
				else{
					idEstado = Integer.parseInt(leerPreferencias.readFiltroEstado(getApplicationContext()));
				}
    	        Integer idCentro=null;
				Integer idComercio=null;
				if(leerPreferencias.readPromoComunCentro(getApplicationContext()).equals("-1")){
					
				}
				else{
					idCentro = Integer.parseInt(leerPreferencias.readPromoComunCentro(getApplicationContext()));
				}
				if(leerPreferencias.readPromoComunComercio(getApplicationContext()).equals("-1")){
					
				}
				else{
					idComercio = Integer.parseInt(leerPreferencias.readPromoComunComercio(getApplicationContext()));
				}
    	        String tipoPago = leerPreferencias.readTipoPago
    	        		(getApplicationContext(), leerPreferencias.TIPO_DE_PAGO_PROMOCION_COMUN);
    	        String categorias = leerPreferencias.readCategoria
    	        		(getApplicationContext(), leerPreferencias.CATEGORIA_PROMOCION_COMUN);
    	        promocionesWebService = accesoWeb.getPromocionesComunesPorFiltro(idPais,idEstado,idCentro, idComercio, tipoPago, categorias);
            }
            catch (java.net.SocketTimeoutException timeOut){
           	    mensajeError =  getString(R.string.mensaje_sinAccesoServidor);
            }
            catch (Exception e){
            	e.printStackTrace();
            	mensajeError="Error";
            }
            return promocionesWebService;
        }

        protected void onProgressUpdate(Integer... values){}
        
        protected void onPostExecute(ArrayList<PromocionComun> promociones){
           if(!"".equals(mensajeError)){
       	      /* Toast.makeText(getApplicationContext(),getString
       	               (R.string.mensaje_sinAccesoServidor), Toast.LENGTH_LONG).show();
       	       textoListaVacia.setText(getString(R.string.mensaje_sinAccesoServidor));
       	       */
        	   mostrarError();
           }    
           else{
        	   if(promociones.size()>0)
                   cargarPromocionesComunes(promociones);
        	   else{
        		   textoListaVacia.setText(getString(R.string.lista_sinPromocionesComunes));
        		   mostrarListaVacia();
        	   }
           }
           progresoPromocionesComunes.setVisibility(ProgressBar.GONE);
       } 
	}
	
	
	public void mostrarListaVacia(){
		Intent intent = new Intent(getApplicationContext(),ActivityDisplay.class);
		intent.putExtra(ActivityDisplay.TIPO_DISPLAY, ActivityDisplay.LISTA_PROMOCIONES_VACIA);
		startActivities( TaskStackBuilder.create(getApplicationContext())
        // add all of DetailsActivity's parents to the stack,
        // followed by DetailsActivity itself
        .addNextIntentWithParentStack(intent)
        .getIntents());

	}
	
	public void mostrarError(){
		Intent intent = new Intent(getApplicationContext(),ActivityDisplay.class);
		intent.putExtra(ActivityDisplay.TIPO_DISPLAY, ActivityDisplay.ERROR_CONEXION);
		startActivities( TaskStackBuilder.create(getApplicationContext())
        // add all of DetailsActivity's parents to the stack,
        // followed by DetailsActivity itself
        .addNextIntentWithParentStack(intent)
        .getIntents());
		
	}

}
